package net.topcrazy.blog.dao.impl;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import net.topcrazy.base.db.dao.MySqlBaseDAO;
import net.topcrazy.base.db.dao.ToolTemplate;
import net.topcrazy.blog.dao.TsysRolePopedomDAO;
import net.topcrazy.blog.pojo.dto.TsysRolePopedomDto;
import net.topcrazy.blog.pojo.po.TsysRolePopedomPO;

/**
 * 数据访问对象：TsysRolePopedomDAOImpl，请将访问数据库的直接方法写到此对象里。
 * 
 * 温馨提示：
 * 1、如果您准备访问数据库，请使用：this.getDbTemplate()...
 *     A、DbTemplate里的void saveData(...)方法让您无需写SQL语句即能把数据存入到数据库，并包含批量处理！
 *     B、DbTemplate里的void saveDataAndReturnKey(...)方法让您无需写SQL语句即能把数据存入到数据库，并返回数据库自动产生的键值！
 *     C、DbTemplate里的findForXXX(...)方法让您随心所欲的查询您需要的内容！
 *     D、DbTemplate里的void updateData(...)方法让您对象化方式修改数据库的内容！
 *     E、DbTemplate里的int updateWithParams(...)方法让您随心所欲的修改数据库的内容！
 * 2、如果您准备使用某工具，请使用：this.getTT()...
 *     A、ToolTemplate里的dt工具提供了丰富的日期处理方法！
 *     B、ToolTemplate里的int loadPropertiesToBeanFormMap(...)方法能方便的将Map里的值拷贝到POJO对象中！
 *     C、ToolTemplate里的getXXXFromMap(Map<String, Object> map, String key)方法能方便的从Map里获取指定键的值 ！
 * 3、如果DbTemplate里所封装的功能不能达到您要求，请使用this.getJdbc()...
 * 
 * 创建日期：2012年09月23日11时01分
 * @author BoyoiFramework
 */
public class TsysRolePopedomDAOImpl extends MySqlBaseDAO implements TsysRolePopedomDAO {

    private final String realTableNameForInsertActor = "tsys_role_popedom";

    /**
    * 获取当前操作的实际表名
    * @return 当前操作的实际表名
    * @author BoyoiFramework
    */
    public String getRealTableNameForInsertActor() {
        return this.realTableNameForInsertActor;
    }

    /**
    * 取得 工具访问模板
    * @return 工具访问模板
    * @author BoyoiFramework
    */
    public ToolTemplate getTT() {
        return super.getTT();
     }

    /**
    * 根据主键查询对应数据库内容信息
    * @param guid 主键值
    * @throws Exception
    * @author BoyoiFramework
    */
    public TsysRolePopedomPO findByPrimaryKey(Integer guid) throws Exception {
        String selectSql = " select tableAlias.guid,  tableAlias.roleId,  tableAlias.moduleId,  tableAlias.isshortcut,  tableAlias.operationPerson,  tableAlias.operationTime from tsys_role_popedom tableAlias where tableAlias.guid = ? ";
        Object[] params = {guid};
        List<Map<String, Object>> list = this.getDbTemplate().findForList(selectSql, params);
        if (list != null && !list.isEmpty()) {
            TsysRolePopedomPO obj = new TsysRolePopedomPO();
            this.getTT().populateBeanFormMap(obj, list.get(0));
            return obj;
        }
        else {
            return null;
        }
    }

    /**
    * 将值对象保存到数据库，并返回主键字段对应的值
    * 如果Bean里的主键字段值不为空（null），则将Bean里的主键字段写入到数据库
    * 如果Bean里的主键字段值为空（null），则主键由数据库生成，并将生成的主键返回
    * @param obj 值对象
    * @throws Exception
    * @author BoyoiFramework
    */
    public String save(TsysRolePopedomPO obj) throws Exception {
        Object primaryKeyValue = this.getTT().getProperty(obj, "guid");
        if (primaryKeyValue != null) {
            this.getDbTemplate().saveData(obj);
            return String.valueOf(primaryKeyValue);
        }
        else {
            return this.getDbTemplate().saveData(obj, "guid");
        }
    }

    /**
    * 将值对象保存到数据库（批量保存）
    * 如果Bean里的主键字段值不为空（null），则将Bean里的主键字段写入到数据库
    * 如果Bean里的主键字段值为空（null），则主键由数据库生成
    * @param objs 值对象组
    * @throws Exception
    * @author BoyoiFramework
    */
    public void save(ArrayList<TsysRolePopedomPO> objs) throws Exception {
        Object obj = objs.get(0);
        Object primaryKeyValue = this.getTT().getProperty(obj, "guid");
        if (primaryKeyValue != null) {
            this.getDbTemplate().saveData(objs);
        }
        else {
            this.getDbTemplate().saveData(objs, "guid");
        }
    }

    /**
    * 更新数据库内容，由conditionFieldNames指定条件
    * conditionFieldNames可以0个或N个，但如果有那它们应都是Bean里的属性名称
    * 这些名称将提供SQL语句中的where的字段的条件字段，其值由Bean提供
    * 特别提示：自动生成的SQL语句的where条件只支持等于符号，即: = 符号
    * @param obj 值对象
    * @param conditionFieldNames 指定条件
    * @throws Exception
    * @author BoyoiFramework
    */
    public void update(TsysRolePopedomPO obj, String... conditionFieldNames) throws Exception {
        this.getDbTemplate().updateData(obj, conditionFieldNames);
    }

    /**
    * 根据主键删除数据库内容
    * @param guid 主键值
    * @throws Exception
    * @author BoyoiFramework
    */
    public void deleteByPrimaryKey(Integer guid) throws Exception {
        String deleteSql = " delete from tsys_role_popedom where guid = ? ";
        Object[] params = {guid};
        this.getDbTemplate().updateWithParams(deleteSql, params);
    }

    /**
    * 根据主键（s）删除数据库内容
    * @param guid 主键值
    * @throws Exception
    * @author BoyoiFramework
    */
    public void deleteByPrimaryKeys(Integer guids) throws Exception {
        String deleteSql = " delete from tsys_role_popedom where guid in ("+guids+") ";
        this.getDbTemplate().updateWithParams(deleteSql, null);
    }

    /**
     * 根据PO对象生成Dto对象
     * @param TsysRolePopedomPO PO对象
     * @return Dto 对象
     * @throws Exception
     * @author BoyoiFramework
     */
    public TsysRolePopedomDto poToDto(TsysRolePopedomPO po) throws Exception {
        TsysRolePopedomDto dto = new TsysRolePopedomDto();
        this.getTT().copyProperties(dto, po);
        return dto;
    }

    /**
     * 根据Dto对象生成PO对象
     * @param TsysRolePopedomDto Dto对象
     * @return PO 对象
     * @throws Exception
     * @author BoyoiFramework
     */
    public TsysRolePopedomPO dtoToPo(TsysRolePopedomDto dto) throws Exception {
        TsysRolePopedomPO po = new TsysRolePopedomPO();
        this.getTT().copyProperties(po, dto);
        return po;
    }

}
